package com.cg.leetcode;

import org.junit.Test;

/**
 * LeetCode每日一题 357.统计各位数字都不同的数字个数
 *
 * @program: LeetCode->LeetCode_357
 * @author: cg
 * @create: 2022-04-11 16:25
 **/
public class LeetCode_357 {

    @Test
    public void test357() {
        System.out.println(countNumbersWithUniqueDigits(3));
    }

    /**
     * 给你一个整数 n ，统计并返回各位数字都不同的数字 x 的个数，其中 0 <= x < 10n 。
     * <p>
     * 示例 1：
     * 输入：n = 2
     * 输出：91
     * 解释：答案应为除去 11、22、33、44、55、66、77、88、99 外，在 0 ≤ x < 100 范围内的所有数字。
     * <p>
     * 示例 2：
     * 输入：n = 0
     * 输出：1
     * <p>
     * 提示：
     * 0 <= n <= 8
     *
     * @param n
     * @return
     */
    public int countNumbersWithUniqueDigits(int n) {
        if (n == 0) {
            return 1;
        } else if (n == 1) {
            return 10;
        }
        int res = 10, cur = 9;
        for (int i = 0; i < n - 1; i++) {
            cur *= 9 - i;
            res += cur;
        }
        return res;
    }

}
